home *** CD-ROM | disk | FTP | other *** search
- 10 ! ******************************************************************
- 20 ! Example: STRING Editor
- 30 !
- 40 ! This program demonstrates the use of the STRING widget as a text
- 50 ! editor when in MULTILINE mode.
- 60 !
- 70 ! This program does not do much error-checking. A practical program
- 80 ! should include more error-checking.
- 90 !
- 100 ! ******************************************************************
- 110 !
- 120 ! Variables Definitions:
- 130 !
- 140 ! S$: General-purpose string
- 150 ! Search: Text search string
- 160 ! F$: File string
- 170 ! N: General-purpose variable
- 180 ! Btn: Returns button value from dialogs
- 190 !
- 200 DIM S$[256],Search$[256],F$[128]
- 210 INTEGER N,Btn
- 220 INTEGER Cursor,D(1:4)
- 230 !
- 240 ! Widget dimensions
- 250 !
- 260 INTEGER Pw,Ph,Px,Py,Iw,Ih,Sw,Sh,Sx,Sy
- 270 !
- 280 ! Variables for display scaling
- 290 !
- 300 INTEGER Dw,Dh
- 310 !
- 320 ! Get display size
- 330 !
- 340 GESCAPE CRT,3;D(*)
- 350 Dw=D(3)-D(1)
- 360 Dh=D(4)-D(2)
- 370 CLEAR SCREEN
- 380 !
- 390 Pw=Dw*.7 ! PANEL width
- 400 Ph=Dh*.7 ! PANEL height
- 410 Px=(Dw-Pw)/2 ! Center PANEL
- 420 Py=(Dh-Ph)/2
- 430 !
- 440 ! Create PANEL for STRING widget
- 450 !
- 460 ASSIGN @Main TO WIDGET "PANEL";SET ("VISIBLE":0)
- 470 CONTROL @Main;SET ("X":Px,"Y":Py,"WIDTH":Pw,"HEIGHT":Ph)
- 480 CONTROL @Main;SET ("TITLE":" Example: String Editor")
- 490 CONTROL @Main;SET ("RESIZABLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
- 500 CONTROL @Main;SET ("SYSTEM MENU":"Quit")
- 510 !
- 520 ! Build "File" menu
- 530 !
- 540 ASSIGN @File TO WIDGET "PULLDOWN MENU";PARENT @Main
- 550 CONTROL @File;SET ("LABEL":"File ")
- 560 !
- 570 ASSIGN @New TO WIDGET "MENU BUTTON";PARENT @File
- 580 CONTROL @New;SET ("LABEL":"New")
- 590 ASSIGN @Openfile TO WIDGET "MENU BUTTON";PARENT @File
- 600 CONTROL @Openfile;SET ("LABEL":"Open...")
- 610 ASSIGN @Savefile TO WIDGET "MENU BUTTON";PARENT @File
- 620 CONTROL @Savefile;SET ("LABEL":"Save")
- 630 ASSIGN @Merge TO WIDGET "MENU BUTTON";PARENT @File
- 640 CONTROL @Merge;SET ("LABEL":"Merge...")
- 650 !
- 660 ASSIGN @S1 TO WIDGET "MENU SEPARATOR";PARENT @File
- 670 !
- 680 ASSIGN @Quit TO WIDGET "MENU BUTTON";PARENT @File
- 690 CONTROL @Quit;SET ("LABEL":"Quit")
- 700 !
- 710 ! Build "Edit" menu
- 720 !
- 730 ASSIGN @Edit TO WIDGET "PULLDOWN MENU";PARENT @Main
- 740 CONTROL @Edit;SET ("LABEL":"Edit")
- 750 !
- 760 ASSIGN @Cut TO WIDGET "MENU BUTTON";PARENT @Edit
- 770 CONTROL @Cut;SET ("LABEL":"Cut")
- 780 ASSIGN @Copytext TO WIDGET "MENU BUTTON";PARENT @Edit
- 790 CONTROL @Copytext;SET ("LABEL":"Copy")
- 800 ASSIGN @Paste TO WIDGET "MENU BUTTON";PARENT @Edit
- 810 CONTROL @Paste;SET ("LABEL":"Paste")
- 820 ASSIGN @Replace TO WIDGET "MENU BUTTON";PARENT @Edit
- 830 CONTROL @Replace;SET ("LABEL":"Replace")
- 840 !
- 850 ASSIGN @S2 TO WIDGET "MENU SEPARATOR";PARENT @Edit
- 860 !
- 870 ASSIGN @Findline TO WIDGET "MENU BUTTON";PARENT @Edit
- 880 CONTROL @Findline;SET ("LABEL":"Line Number...")
- 890 ASSIGN @Findstr TO WIDGET "MENU BUTTON";PARENT @Edit
- 900 CONTROL @Findstr;SET ("LABEL":"String...")
- 910 !
- 920 ! Create and size STRING widget, set MULTILINE operation
- 930 !
- 940 ASSIGN @S TO WIDGET "STRING";PARENT @Main
- 950 STATUS @Main;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
- 960 CONTROL @S;SET ("X":0,"Y":0,"WIDTH":Iw,"HEIGHT":Ih)
- 970 CONTROL @S;SET ("MULTILINE":1,"SCROLLBARS":1)
- 980 !
- 990 ! Set events
- 1000 !
- 1010 ON ERROR GOSUB Errtrap
- 1020 !
- 1030 ON EVENT @New,"ACTIVATED" GOSUB Newtext
- 1040 ON EVENT @Openfile,"ACTIVATED" GOSUB Getfile
- 1050 ON EVENT @Savefile,"ACTIVATED" GOSUB Savefile
- 1060 ON EVENT @Merge,"ACTIVATED" GOSUB Mergetext
- 1070 ON EVENT @Cut,"ACTIVATED" GOSUB Cut
- 1080 ON EVENT @Copytext,"ACTIVATED" GOSUB Copytext
- 1090 ON EVENT @Paste,"ACTIVATED" GOSUB Paste
- 1100 ON EVENT @Replace,"ACTIVATED" GOSUB Replace
- 1110 ON EVENT @Findline,"ACTIVATED" GOSUB Findline
- 1120 ON EVENT @Findstr,"ACTIVATED" GOSUB Findstr
- 1130 !
- 1140 ON EVENT @Quit,"ACTIVATED" GOTO Finis
- 1150 ON EVENT @Main,"SYSTEM MENU" GOTO Finis
- 1160 !
- 1170 CONTROL @Main;SET ("VISIBLE":1)
- 1180 !
- 1190 ! Loop and wait for input
- 1200 !
- 1210 LOOP
- 1220 WAIT FOR EVENT
- 1230 END LOOP
- 1240 STOP
- 1250 !
- 1260 ! ******** End of Main Program **********************
- 1270 !
- 1280 ! Error handler -- it flag errors and then bypasses the
- 1290 ! incorrect statement.
- 1300 !
- 1310 Errtrap:!
- 1320 DIALOG "ERROR",ERRM$
- 1330 ERROR RETURN
- 1340 !
- 1350 ! ******** Edit Routines ***************************
- 1360 !
- 1370 Newtext:!
- 1380 STATUS @S;RETURN ("TEXT LENGTH":N)
- 1390 IF N>0 THEN
- 1400 DIALOG "QUESTION","Do you want to clear the text?",Btn
- 1410 IF Btn=0 THEN CONTROL @S;SET ("VALUE":"")
- 1420 END IF
- 1430 RETURN
- 1440 !
- 1450 Getfile:!
- 1460 DIALOG "FILE","File to edit?",Btn;RETURN ("SELECTION":F$)
- 1470 IF Btn=0 THEN CONTROL @S;SET ("VALUE":"","READ FILE":FNValid_name$(F$))
- 1480 RETURN
- 1490 !
- 1500 Savefile:!
- 1510 DIALOG "FILE","Write to file?",Btn;RETURN ("SELECTION":F$)
- 1520 IF Btn=0 THEN CONTROL @S;SET ("WRITE FILE":FNValid_name$(F$))
- 1530 RETURN
- 1540 !
- 1550 Mergetext:!
- 1560 DIALOG "FILE","File to merge?",Btn;RETURN ("SELECTION":F$)
- 1570 IF Btn=0 THEN CONTROL @S;SET ("READ FILE":FNValid_name$(F$))
- 1580 RETURN
- 1590 !
- 1600 Cut:!
- 1610 CONTROL @S;SET ("CUT SELECTION":1)
- 1620 RETURN
- 1630 !
- 1640 Copytext:!
- 1650 CONTROL @S;SET ("COPY SELECTION":1)
- 1660 RETURN
- 1670 !
- 1680 Paste:!
- 1690 CONTROL @S;SET ("PASTE":1)
- 1700 RETURN
- 1710 !
- 1720 Replace:!
- 1730 CONTROL @S;SET ("DELETE SELECTION":1,"PASTE":1)
- 1740 RETURN
- 1750 !
- 1760 Findline:!
- 1770 S$="Go to what line?"
- 1780 T$="SHORT INTEGER"
- 1790 DIALOG "NUMBER",S$,Btn;SET ("FORMAT":T$),RETURN ("VALUE":N)
- 1800 IF Btn=0 THEN CONTROL @S;SET ("LINE NUMBER":N)
- 1810 RETURN
- 1820 !
- 1830 Findstr:!
- 1840 S$="Search for what text?"
- 1850 DIALOG "STRING",S$,Btn;RETURN ("VALUE":Search$)
- 1860 IF Btn=0 AND Search$<>"" THEN CONTROL @S;SET ("SEARCH":Search$)
- 1870 RETURN
- 1880 !
- 1890 Finis:!
- 1900 ASSIGN @Main TO *! Deletes PANEL widget
- 1910 CLEAR SCREEN
- 1920 END
- 1930 !
- 1940 DEF FNValid_name$(F$)
- 1950 INTEGER Colon_pos
- 1960 IF POS(SYSTEM$("VERSION:OS"),"HP-UX") THEN Colon_pos=POS(F$,":")
- 1970 IF NOT Colon_pos THEN Colon_pos=LEN(F$)+1
- 1980 RETURN F$[1,Colon_pos-1]
- 1990 FNEND
-